package top.eggcode.plugins.office;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;

/**
 * 文档合并工具
 * Created at 2021/1/20 13:18
 *
 * @author DingJiaQi
 * @version 1.0
 */
public class DocumentMergeUtil {
    /**
     * PDF文档
     *
     * @param pathList 路径列表
     * @param outPath  保存地址
     */
    public static void toPdf(List<String> pathList, String outPath) {
        // 创建可操作的文档对象
        Document document = new Document();

        //
        byte[] ts = new byte[0];
        OutputStream out = null;
        PdfCopy duplicator = null;
        try {
            out = new FileOutputStream(outPath);
            duplicator = new PdfCopy(document, out);
            // 打开文档
            document.open();
            for (String path : pathList) {
                // PDF读取器
                PdfReader reader = new PdfReader(path);
                // 文档可能有多页
                for (int i = 1; i <= reader.getNumberOfPages(); i++) {
                    // 新建一页
                    document.newPage();
                    // 可导入的页对象
                    PdfImportedPage page = duplicator.getImportedPage(reader, i);
                    // 追加
                    duplicator.addPage(page);
                }
                reader.close();
            }
        } catch (IOException | DocumentException e) {
            e.printStackTrace();
        } finally {
            try {
                if (duplicator != null) {
                    duplicator.close();
                }
                if (out != null) {
                    out.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    }


    /**
     * PDF文档
     *
     * @param pathList 路径列表
     * @param out      输出流
     */
    public static void toPdf(List<String> pathList, OutputStream out) {
        // 创建可操作的文档对象
        Document document = new Document();

        //
        byte[] ts = new byte[0];
        PdfCopy duplicator = null;
        try {
            duplicator = new PdfCopy(document, out);
            // 打开文档
            document.open();
            for (String path : pathList) {
                // PDF读取器
                PdfReader reader = new PdfReader(path);
                // 文档可能有多页
                for (int i = 1; i <= reader.getNumberOfPages(); i++) {
                    // 新建一页
                    document.newPage();
                    // 可导入的页对象
                    PdfImportedPage page = duplicator.getImportedPage(reader, i);
                    // 追加
                    duplicator.addPage(page);
                }
                reader.close();
            }
        } catch (IOException | DocumentException e) {
            e.printStackTrace();
        } finally {
            try {
                if (duplicator != null) {
                    duplicator.close();
                }
                if (out != null) {
                    out.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    }
}
